let arrs = [
  { id: 1, next: [2, 3] },
  { id: 2, next: [4] },
  { id: 3, next: [4, 5] },
  { id: 4, next: [] },
  { id: 5, next: [] },
  { id: 6, next: [7, 8] },
  { id: 7, next: [9] },
  { id: 8, next: [] },
  { id: 9, next: [] }
]

// 场景：根据 id 删除对应元素即其 next 中元素，以及 next 元素中的 next 元素，直至有关元素全部删除
/**
 * 方式二：先删除父节点（当前节点），后删除子节点
 * 1.传入的当前数组和当前元素 id
 * 2.拿到包含当前id 的对象
 * 3.为什么要加 if curNode 判断：分析（假设传入当前id为1，拿到当前id对象，将当前对象放入中转站中后，删除当前对象，走第一条路线2-4的时候，会依次删除2,4；在走第二条路线3,4的时候就找不到4了，undefined，所以要判断当前元素是否存在）
 * 4.遍历当前元素的next，得到每个 next 中的 id，然后开始递归
 */

function recursion(nodes, id) {
  // 拿到当前元素，并放入中转站中
  const curNode = nodes.filter(item => item.id === id)[0]
  if (curNode) {
    // 删除当前元素
    nodes.splice(nodes.findIndex(ele => ele.id === id), 1)
    if (curNode.next.length !== 0) {
      curNode.next.forEach(item => recursion(nodes, item))
    }
  }
}

recursion(arrs, 3)
console.log(arrs)
